{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 神经网络简单案例研究\n",
    "\n",
    "罗周杨 20180906\n",
    "\n",
    "使用softmax线性分类器对数据进行分类，染回实现一个简单的神经网络来分类。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 生成一些数据\n",
    "\n",
    "生成一些数据，这些数据不太容易线性分类。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzsnXd4HMXdgN/Za+qSZctVtuXeK3LDgOnY9JLQCS3hI4QQCCGEEEroSUgCAUKoIbRQkgAmOBhjug3YMu69y7JlSVav13a+P+bOupP2TpJ16vM+jx7pdmdPc3d785tfF1JKNBqNRqMJYnT0BDQajUbTudCCQaPRaDRhaMGg0Wg0mjC0YNBoNBpNGFowaDQajSYMLRg0Go1GE4YWDBqNRqMJQwsGjUaj0YShBYNGo9FowrB39ASOhD59+sisrKyOnoZGo9F0KVatWnVISpnR1LiYCAYhxIvAmUChlHKixXkBPA6cDtQAV0kpvwucuxL4TWDoA1LKfzT1/7KyssjJyYnF1DUajabHIITY25xxsTIlvQTMj3J+ATAq8HMd8DSAECIduAeYBcwE7hFC9IrRnDQajUZzBMREMEgpvwBKogw5B3hZKr4B0oQQA4DTgCVSyhIpZSmwhOgCRqPRaDRtTHs5nwcB+0Ie5wWORTqu0Wg0mg6iy0QlCSGuE0LkCCFyioqKOno6Go1G021pL8GwHxgc8jgzcCzS8UZIKZ+VUmZLKbMzMpp0qms0Go3mCGkvwbAQ+IFQzAbKpZT5wGLgVCFEr4DT+dTAMY1Go9F0ELEKV/0ncDzQRwiRh4o0cgBIKf8GLEKFqu5AhateHThXIoS4H1gZeKr7pJTRnNiaToyUkq8+2cXi9zdTXeVm/OT+nHPhZPr2T+7oqWk0mhYgumJrz+zsbKnzGDofLz71Nd98sRu32w+AYYArzsG9j55O/4EpHTw7jUYjhFglpcxualyXcT5rOjcF+RUs/6xeKACYJtTVevn3a2s6cGYajaalaMGgiQmb1xcgLO4mKWHj2vz2n5BGozlitGDQxIT4BAeGISzPxcV1yZJcGk2PRQsGTUyYmj0IK3eVw2njhPmj239CGo3miNGCQRMTXHEOfnbH8bhcdlxxdmw2gctlZ8z4viw4Z3xHT0+j0bQAreNropKXW8aS/26h6GAlo8f35cQFY0hJjbMcO2HKAB578QJyvs6lqtLNmAl9GT6qD6q4rkaj6SrocFVNRFYs38tzjy/D5zUxTYnDYcPpsnH37xfo8FONpguiw1U1rcLj8fPCE8vxuP2Ypto8eL1+aqo9vPzMtx08O41G05ZowaCxZOfWIgSNTUBSwqb1BZh+swNmpdFo2gPtY+jGeDx+vly6g2Wf7cIwBMedPJKj5w3Hbm96PyCEIJKRUagBsZyqRqPpRGjB0E3xev089OvF7N9XhieQjZy7q5RvvtjNL+4+CcMWXTiMHNMHw2KIYQgmTRsYMWdBo9F0fbQpqZvyzRd7OLCv/LBQAHC7fezYeoi1qywrm4dhd9i4/ufH4nTZsAU0DKfLRlKyiyuvn9Vm89ZoNB2P1hi6Kd98tRu329fouLvOx8rluUybOdjiqnCmHDWIh/5yNp99tI2C/EpGj+/HsScOJz7B2RZT1mg0nQQtGLopTqf1RyuEykZuLhn9kvj+FdNjNS2NRtMF0Kakbsq8k0fisqhR5HDaOPbEER0wI41G01XQgqGbMiV7EDOOHoLLZUMIpSk4XTZOXDCGkWN1a1SNRhMZbUrqpggh+OFPj+aEU0ez8utcDEMw+9gshg5P7+ipaTSaTo4WDF0Er9dPwYEKkpJdpKUnNOsaIQQjx2ZoDUGj0bSIWPV8ng88DtiA56WUjzQ4/2fghMDDBKCvlDItcM4PrA+cy5VSnh2LOXUnPv5gC2+/ugaQ+HwmI0b34Se3HUdqWnxHT02j0XRDWu1jEELYgKeABcB44BIhRFidZSnlLVLKqVLKqcATwH9CTtcGz2mh0JiVy/fy5svfUVfrpa7Wh89rsn1LEY/ctYSuWABRo9F0fmLhfJ4J7JBS7pJSeoA3gHOijL8E+GcM/m+P4N031oUlqQGYfklxUTXbNhVGvE5Kyb49pWzbXIjHIp9Bo9FoIhELU9IgYF/I4zzAMjVWCDEUGAZ8EnI4TgiRA/iAR6SU78ZgTt2GQ4VV1ickFORXMmZCv0an8nLLePyhzygvq8UwBKZfctFV0zlpwZi2naxGo+kWtLfz+WLgX1LK0C3wUCnlfiHEcOATIcR6KeXOhhcKIa4DrgMYMmRI+8y2E9B3QDK5u0sbnxAwMDO10WGP28fDd35EVZWb0Cp4b7y0ir79k5k0bWAbzlaj0XQHYmFK2g+E1lfIDByz4mIamJGklPsDv3cBnwHTrC6UUj4rpcyWUmZnZPScKJsLLp2K0xWeqWyzG/QfmMKIMX0ajV/1zT58Pj8NS6N63H7e/9eGtpyqRqPpJsRCMKwERgkhhgkhnKjFf2HDQUKIsUAv4OuQY72EEK7A332AucCmGMyp2zB1RiZX/t8sklNcOF027HaDSdMG8svfnmzZMvNQUVVEn0JEs5RGo9GE0GpTkpTSJ4S4EViMCld9UUq5UQhxH5AjpQwKiYuBN2R4KM044BkhhIkSUo9IKbVgaMAxJ47g6HnDKC2pJT7BQUJi5CJ2Q7LScbrs1NWGCwch0MltGo2mWcTExyClXAQsanDs7gaP77W4bjkwKRZz6O4YNoPeGYlNjps0bQC90hMoPFiFP6TLmsNp49yLJrflFDXdBgn4Ufs83XejJ6JrJXUzDJvBnQ+fxrRZmdjsBoZNMHBwKrfedZLWGDRNYAI7gS+Br4DlwIEOnZGmY9AlMbohySlx/PSX8/B6/fh8JvHxjo6ekiYmeFG7eWfI4+rA4+aVSYnOVqAQJSAAPMD2wN8dFc1WB+QDbiAd6IPez7Y9WjB0YxwOGw5H83svaDorNaiYjGDwQByQAhShTD0SJRgmA64j/B8eoIBG4WyYwG5gAO1vVioENgfmJAOPXcBR6KWrbdGiV6Pp1HiBVUAl9QtkLWoRN1G+ABOlOayh8cLeXKqJvBx4qdci2gsfSiiY1L8mP+q172rnufQ8tGDQaJrERO1Wt6AWpZoYPrcEyoFDqAW4IQdp3qIsUeaWiiOcRxyRhYpB+y8VJVhrKBIlFDVtidbHNJqo+IDvULZuP2qx2geMAfo3cV0tyv4fybxTBawLjAW16GUCw6lfFCtp2W69DmicEd808UAySrCECggDVfWmuWYkP0rI+VBpS0fq+4j2mnXxyLZGCwaNJip7UBpCcDEKmnO2Ar2Bho59iYrs2U+9/T8NmED4181EmX4aagl5QCL1QqclC6sEklowviGTUBXwK6mfez9UebOG1KEEACiHcBxqlx/Mrg++X32BsbTcP5FOZAHQOONfE1u0YGgjKsrrWPz+ZtaszCMxycnJp49lxtFDLLOVNZ0ZK4csqIWumMZaw16UUAjd8ZaiFsypIceKsd4Vm0BuyPO2xJmchhIqR4oDmI7SdOoCz2WVTLkXJTCD7ERVxdlH49dUiNJgWhrV5ASyAv8n+JwCtWQNb+FzaVqKFgxtQFlpLXff8l+qqz34vOqm3rOjhM3rD3Ll9bPw+002rM6ntLSG4SN7M2SYzi/ovETatUqLcxLrxTHoR6hFmWwkymQTyVzioT7JrLiZ83QCE5s5tiniAz9WVBC+WAfJxVorMFFa0JGEuw5FRV/lUR+umom1sNLEEi0Y2oD3315HVaUnLPPY7fbx5Sc7mZqdyQtPLsft9mGaEiSMHt+Xn/36BJxOHVra+eiDcgBbhXE2dMia1PsLGiJQu3BQfoVai+cMYkclmPmjjGlIP1SmcltzAGuBZiUog7SmH0ivwI+mPdFRSW3Aqm/zwoRCECklf/vzV5SX11FX68Pj9uPx+NmwJp9brv03X3+xW3dla3MkLXPmDiPy/mkLyv8QfD6Dxj6H0P8bD6wm3GfRkKAA8UUZ0xAbaifdHlhFTjVFWsxnoWlbtMbQBkTa+QuEqnxq8X2vqnTz96e+4eCBCs67eEobz7An4gG2oRymEhWBMxplqoiGC8jAujSECXwbMm4Eyi6+k3DhY6Ac1dVE3z0nES5omkKghM04lPO3PeiDcjI3nKMRmEttg3M2rJ3Xms6M1hjagHmnjMRhIRxMKbHbI7/lbrePD/6zkeoqT1tOrwdiokJOg0IBVOTNatRi3RTNGeNGaRBB56id+vj//qh26G4iawEG0etJGigBNQDlxD4amINqltiUcGsNEqXBBDWFvighFOpPEIFjWYRrTLbA8QKOTNNoal4elLlNE2u0YGgDTj1rHCNG98EVpxQyu93A4bRx6TXZliamUOx2g907DkUdo2kpxdQ7dEORqAibYIKZlUCuoflJYyYqAW4wqrXIbOAYVM6DQfRQ0mQim6GCcx2NCv3shdJQjrT8RXMpRBXS+xZYhgqv9aFKUgxGLfpxgb8HoTKV3SHX+1FCdS+qbUushEN+YD7LUb6YzWgBEVu0KakNcDhs/Or+U9i07iAb1uSTlOxk9rHD6J2RSGF+JZ9+tA2P2/pGNk1JYlJbf+F7GpVYLxzB+jtBQWyiFriR1O+I99CyhCo3ajFMpPHCnUzkJLJhqB12P+rLXQQRKBNOe0bjlFJfkiL02GqUljIi8ENgzDIim8BMlNDdi3pvW0MByiQY/F/Bz9ADaBNsrNCCoY0QQjBhygAmTBkQdvySa45iQGYKb7z0HXW1DXZQAlJS4sgaocNXY0scavGNFE0TKjQOoJLKBgUelx3B/1uJWqQaRtMIVKG7HdQv/vHAqJCxowPzKQrMWQbOjTuCebSGPVi/Xx6Uj6F3yLE6mhaeEvWaQgWDB5XzUY56HzJpOg9jt8W8TNTnVENsqsxqtGBoZ4QQnHDaaOYcN4zf3/MxebllmH4Tm93A6bTz87tO1ElwMacvajFuDiYqFyEoGJyEm0eag0TttufQOLbfjjIHjQ6Ma+iLMlBZ0m6UIzdormlvItWDMgPnQgWDjeY5zEPH1KCKAwZDcktRYcHjUJ+X1bV7Ue+JFQKlqWnBEAu0YOgg4uId3PW7+WzfUsTeXSWk905gylGDsOsy2W2AHeWwXU+9dhBatbMhob6GwSincqQonEiOaS9qEYu0UDXl3msPH0I04rH2uQRfdygulAO8vInn9FC/q99G4wgtE/VeN+y5UIrK/WiqflJHCNDuSUwEgxBiPvA4auvwvJTykQbnrwL+gNIbAZ6UUj4fOHcl8JvA8QeklP+IxZzakk3r8nn7ldXk5ZaRmhbPGedP4PhTR7V4py+EYPS4voweZ7VD0hw5wUxjL8qmH+xfcDT1/gYD5Uy1WmxCncR9A9fkUb9YCVQEUQLKtt4dyUIJ0obvj51wbSHIBFTkl5fojuADqKit0ihjyqk3rXloWigI1GeRHGWMpiW0WjAIIWzAU8ApqG/PSiHEQinlpgZD35RS3tjg2nTgHiAb9W1eFbg22l3ToaxdtZ8nf/c5Ho+6+YsKqnj9xRyKCqq48AfTLa+pKK/js4+2s21zIYmJTqbPGsxRswZr7aBNqAbWEl6xtB8qMkhQH9pZhTIT1TW43qDeqUrgmpEozaEM9ZXpRb2QSKK+gU4oTiKXlegKpKPMXTuoz2pOQgkAqw2QCxWFVYLq+hbJ5FMXuD5YpM+K0OfPp2kzVTK6dXxsiYXGMBPYIaXcBSCEeAM4B9VyqilOA5ZIKUsC1y4B5gP/jMG82oTXX1h5WCgE8bj9fPT+Fk4/bwJJyeHq/8H9Fdx3+/9w1/nw+dQN/s2Xe3C6bFx74xxmH6uTf2KHRGkBDU0gBSin5uDA452oPUzDBScJJQSsyla7UAKmIeNQO+VgRrWBWtjG0/4dz2LNANRrrkUtFU2ZtgRKm6jC2nltoISqCPwuifAcoXkZDQW3FdPQkfexJRbv5iCUty5IHvWeu1AuEEKsE0L8SwgR/IY299pOgdfrpyDfancIdofB3l2Nb/SXnv6GmmrPYaEQxOP28/wTy9m1XecsxI5SrM0YwYqloMwUVkJBoEwcLa3Lk4TaKQ9FJaANQYVzHklPhM6IgXXobTQG0njPKVB5GsGqsaMDj0PNcwZKoIYuSylEX6b6WZz30rr6TJr2ErPvA1lSysnAEqDFfgQhxHVCiBwhRE5RUVHMJ9gcbDYDh8P6LTP9kuTUcOeXz+tn66ZCIpU/8npMFr3THMVK0zyiZYx7UEpspI5oEuuyF80hWCJ6IiofoafnoThQ1uG+KLdjMD8jm/oorHiUQB2OEqiDUcaHhv6LvkRO/EtCCZgg5cAKlN/nK5QmF8mkpYlGLATDfup1dFDByPtDB0gpi6WUwZi/51Gpk826NuQ5npVSZkspszMyMmIw7ZZjGIJjThyBo4FvQBiC3n0TGTy05cXCCvKPtBVjdyJY3qC1fYWTiR5PX0T0LGadPRs7XCh/xHGBn3E0TtCzo77+E1F+HSufjA21XIQ254lDhfxmU6+Z1KJ8S9XU+0TKUSGxWntoKbHwMawERgkhhqEW9YuBS0MHCCEGSCnzAw/PRgV5AywGHhJCBPX3U4E7YjCnNuOSq4+iIL+C7ZuLEIZAAEkpLn7+mxMaRSXZHTbGTuzHpvUHI/Z6GT6qJ3ejCvYv2Et928xBqF3kkexZEqm3XVu94SZqAbHRWAgYWPsQNG1LDerzr0At+ENobM5zoZzLwQXf6t6w6oMB6nMuoBNbqDslrRYMUkqfEOJG1CJvA16UUm4UQtwH5EgpFwI3CSHORonuEuCqwLUlQoj7UcIF4L6gI7qz4nTZ+eVvTyF3Tym5u0vo3SeRMRP6YRjWjsYLLpvKzns+xl1nsWuRMGdeT3Y+7yM8k1Wi9hZ+VBRRS8klslAI4kfZ/0N7KRuocEcdNty+VKBKbAQX/BpU5NdIrBfyYDRTpOeKtBmobPVMexqiK9b/z87Oljk5OR09jaj4vH6ef+JrVn69Fyklfl/j99lmE5x29nguutI6zLV7E6yvY6XmC1QRumhF5RpyCNhI0+aoJFS0TR7KSelALULBDmMlKOGRhk6YamtysF60DVTxwZaEc29G+Y+snmsYShPRCCFWSSmzmxqnM5/biNf/voqcb3IPt/a0wu+X7N3V3NaN3Q03kW36Bsrk0xLBsJemhYKBEgah/RLMwFwqUAldhBxvWFBPEzui7eQF6vNoSYTYYFQxPatoswGNh2uiooN/2wCPx8+XH+/A64nuzLTZDTKH9sS2hW6UUzCStmqinIgNI0rcKM2g3OLapuoZJaGiX7yELx4myny1DiWogj/BKKXCJp5Xc+REE7gtTf4MJt85AtcaKI1vKuEbjGAf7WJ0sEFktMbQBtRUuZtVqNluNzjljCOxpXd1thK9Nr9EZc9KVAbu+MDjg9QvJk7Ulz4YyZKMtXCwoaJe0lF9Bay0ChPrRSqY/6Cd0rHHQEUahTZPCmLjyMpb9EGZIKuo9xuFfq4FqHsvlDHoz7cxWjAcIabfZP2afPL3l9N/YAqTpw3EsCkFLDk1DofDFlFjcDgNUlLjue7muWT062n1XUysM14bEnzvSlDZzFWEN5yvQ2kdc1Ff/iwat5wMdhZrjlYWSZTHuvOYpp7RKHNSsL5SMGt8EkduvhNYC5VqrIshbkFpG02V++5ZaMFwBJSV1PDgrxdTUVaHz2ditxskJbu48+HTSO+TiM1mcO5Fk/j3a2txu+udq06XjZlHD+Ws70+i34DkHlxeuyUBDyaRcw+8KDNQJmoxmIKq2lmNWiD6onodBN/n/liXagiet5qXbmTfdjhRWeKHUAIiHvWZtcWytJ/I2uJ+whPlNFowHAHP/HkZhwqrMU21kPh8Jh6Pn78++iW/eWQ+oNp7GjaDd99YR22NB4fTzvyzx3HOhZMOaxY9EwMVLtpUiebmchAlGEAt4jOpNw01FLyZqCS3Guo1EgNVzqIUJYB0I/v2xUAJg7YKFTZR91q0kNXm1GPqWWjBEAF3nZeK8jpSeyXgdNY7wqoq3GzbXHhYKAQxTcmencWUltTQKz0BIQSnnDGWkxaMwe324XLZI+Y69DxGo8oVhPZEiNRhrSmswl0jCV4bMB21Qy1C3f4DUPV4BqMim/KpD1eNlI2r6RoUokxFEPneMtBaYWO0YGiAz+vntRdy+PKTnRgBU8+pZ43l/EunYhiC2lovhk1YrkeGzaC2xkuvkM6chiGIj29J2GVPIAm1s8+jvq3jYNTu/wDhX+LgFzeSX8KJWujTaV6QXaQdqg2VcT28Wa9A09mppnHPaits6HDWxmjBEKCqws2bL3/Hsk934veHawOL39+MYTM4/5Ip9M5IJC7egcfd2LFstxv0G9DTnMlHShyNG8Mnocof5KL8B/EoU04SqjiaFeWo4njBUte1gWvTAj9aS+uZRPIpBAmWCB9Fy/JlegZaMKDyDn77y0UUF9U0EgqgSmQvfm8TZ39vInaHjSt+NIPnHl8e1pfB6bJx2bUzsPVo/0FrEagM1SEoE1Owmcu3TVwX/BzWhVxjQwmUqeh0nZ5IpJ7VoMJam9vYpwal2VajTI6Z9ITquVowACuW7aG8rA6/P/IOwzQllZVueqUnMHNuFskpcbz75joO7Cun/8BkzrloMhOnDox4vaalBHf6JbSsdHJQsPtRDse9aAdyTyQNpU1aNQtqjk/BRJk1Q7Pky1GayDS6extRLRiAzesOWhe5C0EIQXJId7Zxk/ozblL/KFdoYkNrem+YKGeyFgw9j4FYV1xtjk8h6LRuaC6WgWNbgBkxmGPnRevYQK8+CVFNQE6XjZPPGKN7NLc7XpRjuTXosgc9Eyeqj0NocmN64Fi0/XAFymkd7b6pprsnPmqNAZh38kgWv7cZv8W9YLcbnHDqaL532dT2n1iPZwut/wI27Aim6TkkoHxMQfNicwIRcmle2HRTz1WF0lhqqA+H7jrVerVgADL6JXPdzXN59vFlGIbSHHw+PwvOHc+Z508kToebdgA+VKGzphCo3aEL5VMIXQR0gpoGWhaZFs1pHSSZ6EtnwxLwlSiTZtfxTWjBEGDG0UOZPH0gG9bkY5qS8ZP7k5jU/aMPOi8+6iOMomGgegcLlD9iH0rLSEdFN3WdXZqmM5CCEg4RWi5iQ7UpjYRJ4/yJrueb0IIhBFecg6Nm64YenQMXzcuGlihB4KJtSytoegZDUFVYGwoGgdI+BxI97yHYczrSOR9dYdnVzmdNJ0WgEuCac4tqU58mViSgijEGS3YLVHjrbFRNrabuteZouZ2fmAgGIcR8IcRWIcQOIcSvLM7/XAixSQixTgixVAgxNOScXwixJvCzMBbz0XQXBqCymSOVRDZQCUd6f6OJJWmoqq9zUS1Gp9F8k2QikYVHKl1BW4AYzFIIYQOeAk5BpQiuFEIslFJuChm2GsiWUtYIIX4M/B64KHCuVkqpQ340EcgI/PhRJbULUIJAotR6XdtI01ZYLfASFdIqUf6I4KbEh7o3q1D36wHq+4cYKN/E2Daeb+yIhfiaCeyQUu4CEEK8AZyDKmADgJTy05Dx3wCXx+D/dgqklGzZUMDXX+xGSph9bBbjJ/fvwb0W2goDZf8dRH3bxq6x+9J0F8qADYT7vUaj7sOgw9mkvuHQQJTASEb1Auk692ssZjoIFQoSJA+lh0XiWuB/IY/jhBA5qHfwESnluzGYU7sgpeS5vywnZ3kubo8PJHz71R6mzsjkxz8/RguHmHGI+u5bEuVonoiqhdS9kKZJ+dZ9GE4HycMH6Huo0+Chvi94KJstxgYFRwnRl8LOS7uKMCHE5UA2MC/k8FAp5X4hxHDgEyHEeinlTotrrwOuAxgypHNEDm1cm0/O17lhXdrcdT7WrMxjbc5+ps7IjHK1pnlUER4TDqp20mpgDl1pF9YUeR+u4Ktr/oC3sgZpShKHZHDCG3eTPmVER09NQz4t7xdSh7pXu15Pj1h47faj0vqCZAaOhSGEOBm4EzhbSnm4a7uUcn/g9y7gM5SnpxFSymellNlSyuyMjIwYTLv1LP9sl2WNJXedj68+bSTbNGHUAduBlcB6lJpuRaRMVBPVv6F7ULphN598715qD5bgq67DX+umYmsei46/BXdptO5jmvahliOLNjqS5lMdTywEw0pglBBimBDCCVwMhEUXCSGmAc+ghEJhyPFeQghX4O8+qDCAUKd1p8bni3yj+KOc01Sj+ivsR2kEh4C1KCuk1VgrggXyugcb/vQ2prtx+Q/T62PnK0ta/fw1B0soXr0db1VLKtVq6gl1NDcXOyrstevRaj1cSukTQtwILEa53l+UUm4UQtwH5EgpFwJ/QBmE3w7YTHOllGejUgifEUIEPTaPNIhm6tTMPjaLNTl5jbQGl8vOnHm6FENkttPYVmuiShw3dNIlo4SHFdV0ZlXdV1PHgaXfIU3JwBOn4UhuvEhIKcn/dA35H3+HtCj77q9xU7ppzxHPwV1WxReXP0j+0tUYLgem18+Emy9g+gPXaP9Fi+gH7Eb5GpqDgYpC6prvcUwMtFLKRcCiBsfuDvn75AjXLaf5HTM6HVNnZDJ2Qj+2bCw4LBxcLjsjx/bhqNmDm7i6pyKB0gjnBKrmfWjhuyFE1wyKUdbLzsXutz/nq2t+jwhU7TW9PmY/cROjr1lweIynvIr/nfBzKnYcwFdj3ZDenhhH+pSGne6az9Lz7qLo602YHh/+gEay/g9vsve9ZQw+YzZjf3w2yVm6fHzT2FCVWbei7t9IFgGByr4fQlcOjug+nrt24uD+CurqvGQOScPusHHzr49n5de5LPt0F6YpmXvCcGbOHao7uUVEEL3URcP3LQFVJM9qpxbMTO1cVOzYz5dX/Q5/rTvs+Dc3PUHvaSPpPW1U4PGTlG3KxfREqCArBLY4JyMuO+mI5lG+dR+HVmzF9IRrtNLnp3zTXip37GfLU+9x0sIHGHiipWtPE0YcKis6GB1XgtJ+vYHHvVBGEGdHTTBmaMHQTA7klfPE7z7nUGEVhiEQQnD5tdkcc9JIZh2Txaxjsjp6il2IDFQzFKt6NKkW4wegnNBWu7Q+sZ1aDNj67H8xfY2DEsw6L5uffJdjXriCDGgGAAAgAElEQVQN0+dn91ufRRQKwm6j9/RRHPPiL9ny9EK2PL0QT3k1/edNIfuha0kbn9XkPCp3HcBw2hsJqMPz8fgwPT4+v+xBLt7/FsLQm5nmEXyfMlD3nwelUXSf5bT7vJI2xOPx89CvF1NZ6Q5bm/7x7Ap6903SndyajR9l+rETXlMmuPOfSLjGYAK7UE7phkLBAEbQGfvvVuUWIr2Nm3tI06QqV8VemD6/5Zgg8QN6c9Y3T7H0/LvZ/1EO/hq1uO97/2vyP1nNWSv+StrY6GHbqWOHWDq0G+KrrqNk3S56Tz1yk1XPRdAZ78HWorcIzWDV17l4Pf5Ga5PH7ec//1zL03/8kh9d+Do/uvB1/vrol5QUN6eme0+jDFiGCjrbT+OyxMHSAaEExzYUCr1R9t7O51sAGHD8VOyJjWvr2OKdDDxpOgD2OCfJIyP3CK8rLGX/khz2L64XCgBIia+mju/uejFsvK+mjpK1O6nJr+9hkTxsAANPOQpbXNc3bWjaFy0YmkFhQWVYElsoO7YUsWLZXjwePx6Pn5XL93LvrR9QU93c6IWegJ/6rNFITjtJeGZpHUq7sPJF1NCZHXsjrjgZV3oywh7SCtYwcCQlMOa6Mw4fmnrvlRGfQ/pN1j74KtK0eP2m5OBna9U4KVn74Kv8s+/5LJp3M28Pv4zFp/6SuuJyAI5/4y4yz5iFsEf+qtsT40ifrGtOaerRgqEZZA5JwxVnbXWTSEyzfrEzTUltrZcvluoEt3qa04kNlBAIjo0UogpHnmzUPjgS4zlrxV8ZdvEJ2BJc2OKc9D16AlPuuoLqvCK+vPr3vJywgC8ufwjhjHBf+fwUfLE+oinIXVLBpiffYetzH7Du4X/iq3HjrajBdHs5+PlalpzxawB2vLSYvEUrkKFvVyBM1XDYsSfEMe/VX2v/giYM7WNoBlNnZJKcEofHU43pr/+GCUMgzcYLlMftZ/O6fOafHa3TU08iGLXRFCawA9V9rZrIkUsOOmM0EkDFzgNsePQtir7djDMtkaSh/Sjfso+irzdyKGcrptujFubAfSM91ppok0jIuf05HKkJjUJdTa+Psg272f9RDitufRp/Xbj2KmwGKSMH0fuoUYy47GQGWEQk1RWVkfv+10ifn8zTZ5GY2TmqDWjaBy0YmoHNZvCbR+bzwhPL2bjuIAJI75PAoCGprM05EKYxABiGoHdGpB4CPZG0Fox1oxzOkXIdoLN2aStauYUPT7wVX6378MIfRPol0h9YoGVstB3T46WuwLqUiLDb2P3mp5bnpM9P+bZ91Bw4RO67y4jv14sT//Nb0iermkxbX1jEtz99QuVgSPj25qeY9KtLmHb3D2Iyb03nRwuGZpLWK55b7z6JulovXq+fLRsKeO+t9Y2EAoDNbnDigjEdMMvOSiLKYRzJZ9CQAhpnRoeSEotJxYziNTso27SXlbc+ja/aOlGtLZB+E3tyPL7KxmUuTK8fZ3qyZTa1GiDxVqggicpd+fzvhFu5MPefVO8r4tubnmykZWz4/Zv0P24yA47XrVNihxsVlGFD5UDYog9vR7RhsYXExTv4eNFWnnt8Ofv2WO9qfV4/z/z5q4jneyYTUE114lBfgGi3nknkJCGDzlB/RkrJ/qWreHPIxbw/6wa+uOoRagva5vMWDhvC0XgPZ0+KZ9Q1C7AlhIdLGi4HfeeMZ/TV88Md4FEwPV72vPU52//+Iaa3sXnLV1PH5qfeO7IXoLFgF/A1KpN6Eypir/OsF1owtJDKijo++PfGiFFKoCwFubtLefDXi6ko00XLFAJVhHcOcFzgd6TbLwXll7AiAVU/qeOQpsnnlz3Ikvm/oiavSOUj+NqmiqYt3kXq6MEkDuqDEeKotsU7SR07mJl/uJ5Zf74BZ3oyhtOBsNsYcOI0Tnr3ftLGZzHyqtPCQ2cjuGZ81XVU7jlIXWEp0metrdUVRaqAq2kZRagWNhKlGQd/1hH5vm9ftGBoIVs3FWKPEvoXis9r8ulH29t4Rl0VJ6qeTMP3MrjDjbTQZqFCWSujjGlbdr/5GbkLl0c20zQDe2Lc4TpKkbDFOZl+/9Wc+c2TnJ3zNON/dgFJQ/uRPHIgU+68nNM/+zOG3UbG7PEIw8Bw2BAOGwc/X8tnl9yP3+NlzpM3Me+1Oxl0WjYZs8aSOm6o9f+Kd5I+aRiD5s/EntS4KKEt3sngM2dTsfMAK259miVn3sHaB1/VwuKI2EfkUvKNOhZ0CNrH0ELi4x3IZoZKer1+du9oHKq5f18Z77yxju2bC0nrFc/p501g5tyhPbDaZRaqf25JyDGTyL0ZQLVWDNZbAhiJaqHYPpheH2sfei086aw5BD7ajNnjmfnnG6jNL+bT798Xcbgt3kn2wz9i/E3nqwOJ8cz43XXM+N114fPx+/notNtxHyoPO57/yRrW3PcyRz1wLUPOPpqBp2az/cVFrLozPDEuiL/Oy6D5MzCcDtY99Brl2/IOh8oaDjuu3ikkDx/Ae1N+iN/rR3p95H+yhg1/fJszlj/RZBa2JpRoOU57UNWC+7XPVCKgBUMLGTuxH3a7DdWJNDp2h0HmkPCInL27Snjw14vxuH1ICWUltbzwxHJyd5fw/Sumt9GsOyuFNBYCzRG6QRUcVBGzOFSIa9tSuTufRcfdHJZd3CSGYMwPTyfzjNlkLpiFEbD5V+UWYDjs+COYbdImDGPM9Wc1+fQFX6yzdHj7a91sfea/HPXAtfg9Xv53/C2UbtgdUaDZE+MoXLYRe3ICwmlXQkEI7PEuhl9xCtPuuYJ3J/8IX8j1/joPfreXZT/6I2d8+Xhz3g0NoKL0IpmYJaqNbToqLLtj0KakFmKzGdxy5wnExTtwxdkRApwuG1abfZvN4MT5o8OOvf5iDu46X1jEotvtZ/HCzT3QH5FH681BJmqX1fZ8euF91OaXNApFjYThtHP6l3/h6L/9nCFnHX1YKAAkZmbg6mWdvW1PSeCMZY9jcza9MNQdqojoN/BW1CBNkzX3v0rJ2p1RtRxhCEo37eGjU2+jZFXA/Cmlqu+0cz/V+4rwuy12ulJS9O3miGXDNVYMJXoEkqD5SaFtg9YYjoCRYzN47MULWLl8L+UltQwf3QfDEDzz2DJqqtSXJzHZyY9vPZb0PuH5DNs3F1o9JTa7jW2bi8ie05NU8lg52tpeoFbtLaBs4x7rEhURGH7ZSfSbM97ynDAMjv7bLXx68f34az2HcxtsCS6Oee4X2BzN2y32nTM+YnZ06oSh/GvE5VTnFTXpDzG9fvb995swjQCUVlC4fCPlW3I7aUphVyQeyEZ1MbTaZJh0dEtQLRiOkPh4B8edFF6N8s/Pn8+BvHIEggGZKWE+g/WrD/Dxoi2WeQ+HnzOh41THjqE31kXygpVTm+u4F6iY8OZUuaxAdeKqQpmghtKc0t2eimqEw6b83s3AFu8i64J5UccMPnMOC5b+kTUPvErZxt2kjhnClDsvo98xze9dlZiZwcir5rPzlY/CFnUj3knt/mLqDpU3mVBnS3Ax67GfkPPLZy3PS8BbVYstzom3Yc6EEPSdMx57QuOigZpoJKC6FVo1oZLUB1d0jFFHC4ZmUlRQyaeLt1NUUMWY8X2Ze+II4uPDF3IhBIMGN87yfevl71jywVY8UUJcHQ6DsRM71uHU/gxBJbOF7ngNVLjqQFQ3N2sNKxw3avc1A7XYR6IUFRIY3I15gI3Ud9yKnK2eNnbIYfklAa/TSVVqbxxuN0kVJeG7aaF28pnzZzQ584xZ4zjl/QebHBeNOU/dRPqU4Wz449vUFZXTZ+YYhp57DDl3PBddKAjBwJOmM/2Ba8iYOZYNj76Fp6xxjSphM0gclMFxr/6aT867B9Prw/T6sMW7sMU5mPvsra2af89lGKrfuZXGdxB1n3ZMWZ2YCAYhxHzgcZTh7Hkp5SMNzruAl1G1kouBi6SUewLn7gCuRXkTb5JSLo7FnGLJmpw8nvrDF/j9Er/PZE1OHgvfXs+9j57eyFTUkKKCSj56fwveCLX3XXF2DENwy29O7IFd31wolXoP6gtiQzXlGYKK9T7UgufyoZKGxqO29cFe0C7qjfDbaKyim6gvYQFKIE3Cyunnq3XjGpZGxVnfJ2eTgWmqkkfC9GOvqyOxohSH18OA/TuZ96MTmXbX5e1WmE4YBmOvP5ux1599+NjOV5c06cdPmzCU0z76/eHHE39xEStufqqRv8Ae5yRzwUwMh51z1z/PlqcXUr4tj76zxzP6h6cT18equZKmaVyozcy3WPdAL0AlhbZ/v4dWCwYhhA14CjgF5U1cKYRYKKXcFDLsWqBUSjlSCHEx8DvgIiHEeOBiVFrsQOBjIcRoKWW0egjtitfr529/+gqPu35KHrcfn9fPK8+t5Gd3HB/1+nWrDkR0DsbFO/jB/80ke/ZgXHE9zYwUJA7VNL0hkWK9o1GIUsEb9sNIAUZZHA9FosxMm1DtG4O9qfOBKqSsYPOpZ7J7kxcZmJaUIIUNT1wCnvhEkJKSrBHk5Sfw+e++YMCgVFwuG0nJLiYfNYj+A9uvlEfv7DFIf/SvUero8L7ko69dQNnG3Wz92/sYLgdSSpwpiZz6v0dUBJXHy6GcbTiSExh+yYkMPXcuNlfjDHVPeRX7P1oFUjLw1GxcaZ23RHrHYydy+RcDVUyyCwoGYCawQ0q5C0AI8QZwDuobFuQc4N7A3/8CnhTKAH8O8IaU0g3sFkLsCDzf1zGYV0zYvrnQcudlmrA2J4/8/eW89+Z6tmwsIDnFxfyzx3P08cMO+xdsDgMjgmBISnIy93hdB9+aI3FMS6wX/wrgu2ZeXwrsRGkR9VE4e/L87N/nOywUwgj6koTA55MUF1VTXFTN2pz6ZKU3//EdJ58xhkuuzm7ma2kdaWOHMOi0Gez74FukRYkLe2IcQ86ZG3ZMCMGsP/+ESbdfQtG3m4nrnULfoycgDIOqvQV8cMxNeMqr8VXXYk+MZ8Utf+WMZX8hediAw8+x/R+L+fqGxxB2GwLl1J71lxsZ88Mz0FhhoDRlK+Hgpz56yYPaYbbPBjIWuu4g1PYuSF7gmOUYKaUPZTzu3cxrOxTTlBF3/KaEe279gG+/2kNpcQ25u0t56W/f8upzKw+PmT4jE6tAFofTxrEnjWijWXcHesX4+Zpb0VSi+kuHh2bu3unB7zvyqqg+n8mH721m4dvrj/g5Wsrxb9zFhFsugAYmLVuck+QRAxl2obVzPKF/OkPPmUu/YyYdNod9fvlD1B4swVdVCxJ8VbXUFZbx2SUPHL6udOMevr7hcfy1HnyVtXgra/HXefj25qcoXrOj7V5ol0agOhFGWorXovbJy1H1lFYRXfONDV3GqC2EuE4IkSOEyCkqKmq3/zt6XF/LSCIh1I7f4/aHnfe4fXy+ZDvFRdUApKTF84P/m4nDacNmUxLGFWcnc0gqC86b0D4vokuSRWOF1kAlB02gvfsx9Eq3YXe0/n/++/U1ltnwbYHN6WDGI9dxeel7TL3nBySPHETKqEFMvuNSzvjqL5ZmoCC+mjp2vLKENfe9zLa/f8ihFVsahbxK06R03S5qDihf0NZn3sf0NNb0TLeXLU8vjO2L61ZkETlB04/ymQXb3wa13yPs49FMYmFK2o+qjhYkk8YFP4Jj8oQQdiAV5YRuzrUASCmfBZ4FyM7Obrf2XU6XnWt+MpsXnvgan8/ENCUOhw2ny9YoUS2IYTPYvOEgx5ygNILjTh7JmAl9+XLpTior3EyaPpBpMzJ7oLO5JcShHNO7UCUzgo7p3sB6lJAwaa9ObtNmxmN/pqz1/0/CGy+t4lf3n9JuJVAcyQlMu+dKpt0TuZVoKGWb9rBo3i343V6lIRgiYlKfsBl4q1QIa3XeIct8Cek3qd7Xfpu5rkdww1NM8+4vP8rU2XY9z2MhGFYCo4QQw1CL+sXApQ3GLASuROlE3wM+kVJKIcRC4HUhxJ9QzudRqLjDTsXsY4cxaHAaSz7YwqGCKsZM6McJ80fzm5+9j8fT2DYoBCQkhO/G+g1I4XuXN+6UpYlGPEo7CGKiVOr2r0DpdApuv78Pf7q/mIoyP034daOyZUMBt173DpdcfRQzjrYuatdRSClZev49uEsq60Ndo2V6G4I1979C8rAB9D5qFAc+ymkc1ZTgYtBp7eNb6boYKC24uZ0Oo7W+bT2tFgxSSp8Q4kZgMWpb96KUcqMQ4j4gR0q5EHgBeCXgXC5BCQ8C495COap9wE86U0RSKIOzenHNT+aEHTv+tFEsemcT3gbCQQjBxGntV9it51BK22SENu8LOSTLyZ+e68+ubR4+XVzFN1/WYUrC2r02l+Kiap59bBl2u8G0mYObvqCdKN+SS01eUbO7zJkeH7teW6pKgtsMnEkJ+L1eVYoc1UnO2SuZUVfPb8tpdwMyUG1tm4NBtJybWCBkjNoMtifZ2dkyJyeno6eB1+vnj/d9wq5th/D5/NgdKoLgxtuOZeumQpZ/vhvTlMw+Jouzvj+JpOT2DzvrXuRjnYtwpCSghEJfVKhrdTOuCVZ2HUxZaT/WrNzPR+9vpqiwCr/PRAjw+SSGgWXQQUMGZqbw8JPntOI1xJailVtYfMpth7u7RUQQ1rs6iD0pnqwLjmXvu8tASoaefyxHPfRDEvq3fZHDzo8fdZ8dQkUXDSS8G+FBVOOeoD8haC5tiA3Vz6TlEUpCiFVSyibVNy0YWomUkh1bi9i+uYjklDimzhjEQ3d+RNHBSrze+g/VZhN874ppzD9rHIb2LRwh1UAOsREMA4HQ9qtbgQNRxhsoJ2F/1Bey/jOUUrJz2yF2bCkiOTXucF7KNd97DX8TDXwMQ/D3/1x+hK8h9vjdHv7Z74KmBUMEHCkJnPDWPQw6VZuOwvGhIorqqL9/g/dUqDmxDpXY5kM5pP2oaqtBf5oLZV49smZVzRUMuiRGKxFCMGpsX0aNVQ3ql326i+Ki6jChAOD3S95+ZTV7dpRwwy+OPXzcXedl49qDmKZk3KT+JCZFjhTRJKK+LCW0Tjj0JlwogBIUwTIEDbGhMlAHYRUNJYRg5JgMRo7JCL/KEFE7VwOkpHauGkM2l5NZj/2Eb278S6OCekHsCXH46twRfQ9mhFLiPZtcwoUC1FcG7kd9KZdg/a5Q5qJCVAXK79b2QQtaMMSYNTl5uOusQ8lMv2T1in3k5ZaROSSNFcv38tzjyzACseJ+v8ll12ZzwmmjLa/XgNot7UHt7oPvcySt10AJgWCYnx0VBDfAYmwyavHf1eD4ENSuruVfxhFjMti8/mDUMfNOGxn1fEcw6qr5JA8bwNqHX6dyx37iB/bGXVRO1d4C4gekM/lXl5D73nLyPlzRSDiYPj/9503uoJl3ZgqIvJk5RPQII0Fb+xQaogVDjElJdSFEZN+dlCoqxeGw8dxjywJRTfU7rNdfyCFrRG+GjezdPhPuchioBTyYMe5F5UUGay31QQkMiXLotaQMxWCUvyFYo6k30YvyRef7V0zjwTs+xB/FOf3lxzs576Ipna57X/95U+g/b0rE8wNOnE7hrBvwVdepst+GwBbnZM6TN+FIbNwaVNMSTFSCpZ2OWqK1sTvGzDtlVNSe0DabIDHRyedLtuO3iPn2ev0s+e+WtpxiN8OBqlI5A5iO2uEPR5XtPpLaRC6UyWgQrREKACNG9+Gci6LvnstKa9myoaBV/6cjSBkxkPM3/Z3Jt19Mv+MmM+Lykzn988cYdZWOPrKmL5G1ztCy73moDOdvga9Q1X/bNpnNCq0xxJi4eAc2u62RjyGIBEaNz2DROxssd5JSQvGhyNExUkq2by6ipLiarOG96T+o/QqzaVrO6edNYOFb6/FFcEKbfknO17mMm9S/nWfWeuL79mLavVcRLTunal8hmx7/N4XLNpA8YiATbv4efbIb+ne6MxKV3lWIdd+RodRvQA6i6nSF3iuFqDDtGbRnMT0tGGLMk7//Andd4wQs1QLUzrU3zuG3t/2P6kprx57DaWPCFCsbOBQVVPH7e5ZQUVYHQjm0J00dyE9uO/ZwqKymY5FS8uUnO3n/7Q2UldYwMDON084axwfvbIx4zfLPd3PZD2dgRKq22EUp3biHD+b+FH+dB9Pjo2jlVva+u4y5z/6cEZee3NHTayc2o0rIN9wY9EFpt6Ely3dbjANlLl0JzKIrFdHTBCguquZAXrmlf0EYgoefOJvVK/KoqnBHtDvHxds50cL5LKXkj/ctpaiwmro6H3W1PrweP2ty8vj9vR/3wH7RnZN33ljLK8+uoPBgJR63nz07i1myaAsjxkT2GXk9PvL2lrbjLNsWKSUFX60/nA9hegKmEFPir3Gz/MeP4auz6B/d7ajGWiiAMis17GMRrT2gj+jh1LFFC4YYUlvrjbjrs9kMhIDVK/ZFbO85YkwffvvoGSSlNFYZ9+4qoaS4BtkwCsSUbN1YyK3/9w7bIvST1rQPtTUeFr2zKax3B6j+Hfv2lEW8zus1qatt/zIfbcU3Nz3J4vm3U3uwxPK8EIKibzZZnutelEc5Z7URiGYqkqgw7fZBC4YYMmBQSkTHc3Kyi9S0OMwI4Upx8Q4WnDOe3hnWYWnlZXVRTQ0et58nf/d51J7SmrZl356yiJ9/Q2HRkF3bW9KtrvNSsHwjO/7+If4IORAASDCcPaExlZ3IDmcrK35WE8/XfjlOWjDEEJvN4PIfzcDpCrH3C3C6bFx6bTYP3LE4ihPSjFpfKWtEOr4I7UGDuN0+9uxsn5LOmsYkp7qazHSOxL9fW8vV57/Kr258j+9W7Gv6gg7EW1nDpif+w9Lz7+HbW56ibEvu4XO7/rkUX20UoQAYLgcZs6y69nUnqlDVUq2+swbWbWcGRDgevKbtqqk2RDufY8zR84aT3juR995eR8H+SgYNSeXciyezeuV+9u0ptSy45nAYXPvTOcTHR95FpabFM35Kf9Z9d8C6ixgAAl+EaChN21KQX8H/3t2EVYkZh8Ng+Og+bNtUGDG/JVilNz+vgqf/+CU//OnRzDomqw1nfGTUHDjE+zNvwF1Wjb+mDmG3sfXZDzjmxdsYftEJqltcpBcpBPYEFye8dTeGrTsHS4TWPApFBH7SsV7kBTAaSELVBAvu201UCHb79dbWgqENGDuxH2MnnhJ27IlHvrAMYbXZBRdcNpXZxw6L+pxvvfwdW9YXRhEKimGjdGJce7N7RzEP/+YjvJ7wpk2GDQxhMGBQKj+743huv+E9Kiui76ZBmZ3eeGkVM+cO7XSJbyt+8TdqC8uQgbIX0ufH7/Oz7NpHGXzmbLK+N4+dry3FVx3uSBV2gyHnzGX2Ezd184J6PpRQsPqiJgLjUAt/NAaikjNLUMIlnfY0I4E2JbUb3ghmIJvNID4x+odeVFDFR+9vwe22TnQRApxOG1ffMAuHDlttd/7xt29x1/ka+XdMv/p8CwsqueOn7xOX0Hy7ellJDXURSqt0JLnvLTssFEIRdoP8T1Yz4KTpDJo/E3tifXKgPTGOjJnjmPfand1cKACUEdmvUEPTQiGIA1VDqT/tLRRAawztxtQZmSz/bFejxUOaMGlq9N4N61cfINrGcUBmCpdcPYPJ03UPiPbG6/Wzd1fkaJGgMK+r9eFwGNjsolm9o00TVi7bw3Enj4rZXJtL8ZodrHvoNUrW7SJ1zGAm33EpfWePVyejTV2qiKMT3ryLve8uY/vfP8T0+hhx6UkMu/gEbD3C4dw90BpDO3HBpVNITHKGRa24XHZOPWtsxEgkUOGoRQWVEaOZAAoPVvH0H7/g4P6KmM5Z0zRCiKhCOxRTKg3CsNVfEO3al59dSXVV06anWHLg41V8cMxN7PnPl1Rsy2Pff7/hw5N/we63Pwdg8FlzEBZl402fnwEnqhxoYRhknX8sM/94PVPvuoLBZ81h0+P/4a1hl/Ja73NYesE9lG3e266vq/3oRWTp2SfC8c6H7sfQjpSX1bJ44WbWfXeAlFQXp545jqkzIkcaHDxQwe/v+ZiqSnfEiq1BhIAJUwZw2709JaO08/D4w5+xJievWZ3c7HYDp8uG02XH7zOx2Q3KSqyTE+Pi7Pzg+lnMPX645flYI6XkXyMuo2pP49pNrt4pXJz/L2oPlvD+jB/jqazBX+NG2AwMp4Ojn7mFkZcrv1rVvkKWnnsX5Vv3YdjteKtqEYaoN0EJgSMpjrNWPE3qmM7TvS52FFDfQwHU/tuO6mHesc26dD+GTkhqWjwX/mA6F/5gepNjpZQ8+tullByqblaXRSlh47qDSCk7ncOyu3Pl9bPI/WUJFRV1TeYr+Hwmpmmq334ZMXwZVKSSu7b9/Ay1+cURk9L8bi9lm/eSPmk4521+iW0vLOLgJ6tJHNKPsTecTfokJbykafLhSb+ganc+0m/ixx04HvJkUuKtruO7u//OCW/e3dYvqwPoh/IlHEBlM/dC+Qq6znLbKlOSECJdCLFECLE98LuXxZipQoivhRAbhRDrhBAXhZx7SQixWwixJvAztTXz6U7s2FpEZXldc1vvAtDNSu10GdJ6xfPIX8/hpAWjo1bWDWKaKvIomlBQ4yTLv2jYH6LtsMW7GmXWB5F+P46AQ9mVlsSkWy/klA8e5uinbz4sFAAKvlxP7cESpEXl4DBMycHP1sRs7p2PRGAUMAkVmtp1hAK03sfwK2CplHIUsDTwuCE1wA+klBOA+cBjQoi0kPO3SSmnBn66853SIlShvOav9IYhmDZzsNYWOgiHw8aEKQNjXsxw784S8nIjl9OIJa5eyaSOa9g9TBHXL53k4U0HN1Tuid6YKBRnryNrT6lpe1orxs4Bjg/8/Q/gM+D20AFSym0hfx8QQhSignTb527vogwb2RtfhBaJffsnUVJco3acUgmFxCQnV/xoRjvPUhPK2In9Yv6cNptBfl45mUPSmh7cSqSUeMqqLM95K2uoLSojPiN8Hr5aN7v++Qn7Fi7H1SdVNfcxmyGXY2sAACAASURBVE6ytCfEMf6m82Myb03saa3G0E9KmR/4+yDKuBYRIcRMVFDuzpDDDwZMTH8WQnSsZ6YTkd4nkaPnDQ8vr4HKV5iSnak0g4DWb5oSt9vHwfzKDpipJojDYeMntx2L02XDZleam9FKBcI0TTL6NTf2vXXU7D9EXYF1lVdPcQVvDb6Ij07/Fe4SFf3mqahm4VHX8+3PniR34XK2v/Qhy3/8Z+L69cJwRQ9NHXLuXMZef1bMX4MmNjQpGIQQHwshNlj8nBM6TqrwpogWcSHEAOAV4GopD7ui7gDGorpQpNNA22hw/XVCiBwhRE5RUVHTr6wbcPWPZ3HexVNIS4/H7jAYPqo3P73jeL5YsgOvp3EFz5efWdFBM9UEmTx9EJf9MBun0x6wBArGTuzHqHEZ9O6TSFp6fEQLYcMiiTabYEBmKlkj2ieb3XDYLEt6BDE9PvI/Wc3i025HSsn6371B5e78+iznQFntmgPFDDn76IjPY0+MI+t7xyEMHS3fWWnSlCSljBj/KIQoEEIMkFLmBxZ+y7rPQogU4APgTinlNyHPHdQ23EKIvwO/iDKPZ4FnQYWrNjXv7oBhMzj9vAmcft6Ew8e2bS4Mi4MPJT+vnLpaL3FRai7t3VXC7h3FpPWKZ+K0gYedpd+t2Mfbr6ym4EAFqWnxnHnBBE5cMEb7LELw+022bSrE4/YzalwGCRYZ6+tXH+C153IO1z6SfsmOrUUMG9GbPz1/Pvv2lHLf7f9rFL2UlOLk5AVjWPTuJgzDwO8zGTUugxt+cWy7vDaA+H7p9JqQRfHqHRHrHZkeH+VbciletY1dry9V/Z4bIAyD/sdNZv9HOXjLLboRSqgrilaSWtPRtNbHsBC4Engk8Pu9hgOEEE7gHeBlKeW/GpwLChUBnAtsaOV8uj1x8Y6IpbWllJHLPnv8PP7Qp4d7NhiGwOm0c/v9p5C3t4wXnlx+eLEqKa7hjX98R0lxDd+/ounQ2p7Atk2FPP7wp3g8JgKJ35RceMU0Tjt7fNi4f7265rBQCOLzmuzdrQRy1oh0ps/M5Jsv6xO8nC4bP/vVCYwe35fTz5/Iwf0VpKTF0Ss9oV1eWyjHvXIHHxz7M8w6L76aCI1jDEH5tryIz+F3ezG9PvrNnUje/1Y0EjJSmvQ7ZmIsp62JMa3V5R4BThFCbAdODjxGCJEthHg+MOZC4DjgKouw1NeEEOuB9ai0wAdaOZ9uz+ChaaSkWrtihBBs3WTdrOc/r69h60a12/W4/dTV+qgor+PR3y7lny+utGwus/j9LdRU94ROW9GprnLz6G8/pqrSg8ftw+324/OavPGP79i4Nj9sbP5+652wEIK8vWV88fEOvlsRvqh6PX6e/tOXmKbE5bIzdHh6hwgFgLRxQ/n+zlc56nc/wpEaISPflKSOGczwS0+yjpwzTYrX7OCoh67FnuAKG2NLcDH4zDmkRYh+0nQOWiUYpJTFUsqTpJSjpJQnSylLAsdzpJQ/DPz9qpTSERKSejgsVUp5opRykpRyopTycimldUiE5jBCCE49c5zlOdOUvPfWOstzn3203bKQX021h4py67ILdrvRrFDJstJaXnt+Jbdd/w533fJfPluyvVs1DPr68924LRLXTL/ktRdW4vH4yd9fTnWVJ+KCLoA+fRP54D8bGwlhKdXnsHl980M92xJnahLjf3Iuc5/5ObaE8E2I4bSTNn4ofY4aTdaF8yI+x563vyBtfBZnLPsLmQtm4EhJIHFIX6bdeyXzXruzrV+CppV0rawLDQA+v4nNJiz7RhccsI5MitQ6UgjVjxqLhdzvM0lNi7O4qp6y0lp+c/P71FR58QeSml5/PoeNa/P5yS+Oa+qldAl2bI0c7HBgXzk3XvEWCOWDGJLVC4fTwOsJD9msq/Px2IOf4olQZVeaUHzIwh7fgQy78HjcJRWs+vXzmF4/ps/PoFOO4th/qHQlX2UtjuR4vBU1ja6VPj++6lrSJ4/glP8+3N5T17QSLRi6IAMzU3E4bfgtyiUMGmLdzCNrZG92b2/c3c3nM5k5dyg5y3PDNArDEGQOTaPfgJSoc1n49nqqKz1hGoLb7WPNyjz27iph6PDYlVn2ev0IiEkSWWVFHW+/spoVy/YipWT6zMFceOV0yx1/UnLkKGopCSuHvm9PKb0zEik5VIMwRFiNq7o6X8SKzBLJ0GGdryT12OvPZvS1p1O1twBXejKu9Pr7IW1CFqbHesNhi3dRW1iGM7V9Qm01sUULhi7I5GkDSUmNw+OuDluQnS4b5140xfKaS6/J5g/3fhxmxnC6bBx/yii+d8U0qirdbN1QgGETSKnMHj+74/jDY01TsvzzXSz93zbqar2Mm9SfA/vKI5o//D6TDWvyYyIYcneX8NLfvlWCTcDEqQO5+sezSO8TuSptNNxuH/f+YhGlxbWHtZxvvtzDxrX5PPzk2SQmhQuCOfOG8fGirc0qT+L1mhQfquHeRxfw1j9Ws+67/eHXWTyHw2FjxOg+MRWiscRw2EkZ2bjlpKtXMmN/fA5bn/lvI0e1r9bNe1N+xJj/O5OZf7pBR7d1MXR11S5KWWktzz2+jC0bChCBzOcr/28W02dFrla5c9sh/vXqanbvKCYlLY7Tzx3PvFNGHf7SHsgrZ9+eUnr9f3vnHR5VlTbw35maTggBEkJJ6CDSm6ACgoAIggosrgWwl7Wsu64F/Wyg4OrqWtbedQEF2YUVRDpSBemdkISWQEJIIHXaPd8fM4kzzJ0kkEmD83uePLlzzrn3vjlzc99T3tIgjNTkbFb+fBC7zUn33s04lVXA7m3pumvtelgsRiZM7sHg69rhcLhYs/wQ61alIoTg6sGtuGJAEkad8M3nkp1VwDOPzKfYa3ZkMEBUdCivvT8Gq9V/bCOlJOVgNmnJ2dSLCaVrjwSfWcaqJQf59tPNfhFrLRYjYyZ05vqbOrF/90m++2oLh1NziIi0IgScPuW/ZKJHaJiZh58cwBfvbyDzhP62WUSklYJ8GyazkauuacmEyT11/5bajtQ0dr81lx3TZ2I75b/xbgoP4epvnqHF6P41IJ3iXFR01Yuc6PqhPPHCEArybRQXOYmJDSt3VNaqbSxPvnRtwPomTesRnxDFGy8tY7/HXh9g6aL9FQop7Y0Eel3RHKfDxatTfubo4ZzS66UlZ7N+dSp/ee4aDOUoh5/m7/FLiappUFToYOOaNK4e3Nqnzm5z8sbLy0k5eAop3U5iJrORp1++lqYt3DEed28/oRvG3G53sWtbBq3aNuSNl5aVmp3mZBdiMhmwhpiw2ZwIAZGRVux2l4/CKsHp1GgcH0n9mDBdxWCxGhl3ezf6D2rpzs9Qh6MfCoOBTo+Pw2VzsO3Fr/yWlpwFxex9Z55SDHWMS8r1UGoaxxdvYvc/53J04UY0V8VGv7WZ8AgrDRqGczQth3++spJHJ8/hhb8uZNO6C0uEsn93Jgf2ZvksOZ2PUhACzBYj9zzSj6joUDb8ksaxw7k+17PZnBzcl8X2346Xe73kfVm4dKKQ2oqdrFuZgvOczdzvvt7Kof1u+R2eF3f+WRuvv7S8dNmtfoPQgE6Cx47k8s0nm/x9EZyaW5lIMBkNIATDR3fEcs4o32w2cFnnOGIbRTB8TEe/kCbuPhL07t8Cs9lYJ5VC/uGTbH76Y5aOfpbt076hKDMH2+mzAfcbbNkqgVRd45KZMRSdPM3CAX+mMCMbze7EaDFjjYnkutVvEdGsUU2LVymS92Ux4/klOOwupCxZZlpH+rEzjB7f+byutXtberlJgQIhBLRsE8ujzwykXnQo4F6718tVbSt2smndYbr19l/6crk0tm8+ztHDOWW+OA/szWLq04t55pVhWCzuF/Avy5L9ZhgARQV2kvdn0bZDIwYObcPyRQew6wwMCvLt7si2ZeBwaLjO2jhx/Cyjbr6M//2wu1TuHn2bc+dDfQHo3rsZI2/qxII5uzyxkwRGo+CxZwbpek3XBU6s2s6Skc+gOZxodifpS35j5+vf0XP6PZgiQnHm+yYdMljNNL2+bw1Jq7hQLhnFsPqO6eSlZJRmkdJsbs/OlRNeZuTad2pYusrxzSf+Dmo2m5MFc3YxZEQ7v83UsgiNsGAyG3DqvFzLw2w2MunBvqVKAdyzh0BIKdE06fPyP5NbxNSnfuJMbjF2mxNzGRZILqfG8SO5rFh8gGGjOiClDKjUhEFQkOf214hPqMeYCZ357qututesCJom2frrUXpe0Zwbxl1OvfohdOvVzM+CafQfOjP4unbs23OSkBAT7TvFVShnQ21Eahorb532e2wkwFVsx2VzcODThcR0aUX2lgO4itxOkcJkxBodwWWP3VxTIisukLr5hJ4ntpw8Tqza8XtqQQ/SpXF6azIFx+tuUD5Nk6Qe8jdDBbeD2qEDp87ren2vTNTdqzi3yGg0YDQZsIYYCQkxERJq4p7H+tM80TdX09WDW2EN0R9/bFx7hMfumsv61amlZZ+9t4HsrAJsxU6kxG9J51zsdhdrVxzyyChIbK0fcM7pcNGqXUMAUpOzOZVZEFDpCAEmc/n/Gjabi0/eWccPM7fzzUebePXZn3VzNEdEWenZtzmdujaps0oBIGd3mq7PAlJyetshBsx8li5TbiMiMY7QuBja3TOCG7Z8SEisvgm1ovZSd5/S88CRV6ibwBzcoxrdQF91BCHAbNJ/wUlNnveSRUxsOJMf6IPZbMRiMWI0GTAY8FMWwgAP/uVK2l0Wh8Oz/v6fmdv9zFe79mpKz77NsVpNfsrF5dQ4k1PEZ++tZ9umY9hsTnZuTdd13CsLb8O6W+/q6beub7YYGDisDeERFt6atoJXpixm1RJ9T3CABg3D6dw9AbPFiCWkbJ+J4iInLqdGcbGTE8fP8uUHG89L9jqFlAGjr0qni+9b3MLhH37h6m+eYUL691zx3mOExVdPZFhFcLkkzFWlpjE7YTxFOrHmLdER3HJyLgZz3V1V++y99axdkeKXKrJ+gzD+8fFNF7TBeSa3iM3rjnD2bDELvt+p+7I2WwxIDZ/7WixGnpo6lFZtY0vLpJQc3JfFskX7+XXtYd3N7KYtonlm2jAenvh9qW9BRbBYjIy9vRvDRv0eJiQ1OZu5327j0IEsXC6Jw+5CCPfIvSDfXuYymcVi5MG/XkW33s04cfwsKcmnSD96hp/m70VzabhcErPF6Bf2vASTycCHMycEPZObHvmHT3Lgs0UUHssibkAXEscPxBRSNXsXzmI7Gx99hwMfLyy3rSnMyvVr3yGmS6sqkUVx4VTUXPWSmDEIg4E+bz+MMdR3/dcUZqX3Px6o00oB4JY7e9K0RTTWEBNGo4GQEBPhERYef3bQBVu91IsOZfCIdggIOIJ32DU/ZWS3u/jh374ZWoUQtO3QiM7dErAEeGFmZuQRHmGhYVzFPWXNZgMJzaMZNKwt4I43ZLM5SWrdgEefGUhIqBmH3YWmSVwuyZmc4oBKoSTfxWNTBpVuiMclRNFvQEvG3taNqW+OZOioDvS5KpGhI9sHDG2uSYmjgvsUleHI/HX80HEyO2fM4uDnP7H+T2/zn053UqzjSxAMVt/+CslfLqlQW2ehjU1PflQlciiqh7r9RjwPksYNICQ2iq0vfsWZfUeIap1A1+duJ2FY3U+HGRpq5oXXR7Bv10nSDp2mfoNQuvdpXmqpc6HYbE5+9FjcnA+HU07rljeMiwiYySnaE4pi0v19+MfU5aUWVoEwW4xMfqAvfa5sQeqhbL7418bSyKYdO8fTpWcCBfn2CgXzM5vdznhDRrQL2CYuIYoJk3oA7n5Z8uM+3XaN4iIJLSMfRjBwFhaz6rZXcBX9vp/hzC+iwOZg85MfceWnTwT1fvlHMzm6YENAc1Q90pf8Rs6uVOp3SgqqLIrq4ZJRDADxg7oRP6hbTYtRJQgh6HB5HB0ujwvaNXdvy/A4oOkvmwQK5BcTqx9htE17dxazE+ln/UJ5jB5/OQAdLo/j2VeH89/vdnA45TSN4iOJjQ1nwy9pGE0GXC6Nho0j+fOUgTRsHEn6sTO89vwy7F4msbu3Z3Bwb2aFzW6FgI7n0W9Wq4lxt3Xj+2+2+oYYsRi5497eFb7OhZK+bIs78OE5aA4nqd+vCrpiOLPvCLICeZx9kJL1D/2TEaveCqosiurhklIMivPDvTmrP+IWAsLCLeTl2XyaWKxGRo29PMA5gidfGsI7r63mcMppTEYDLk3jhnGX039Qy9J2LVrG8MhTA33O/ePdvTiamkN4pIWEZr8npP/xh11+Tm6aJnG6NEwmg99S17lYrEZ6XdGCJs3Oz3Jm6KgONGwcwYI5uziVVUDzpPrcOKGLz95KVSHL+JtkFThtRrZs4mfRVxEy1+5Gc7owBDCOUNRelGJQBKRj5zhcTn/FIAT06Nucm2/typtTV3AmtwiDQeByul/yvfoFTsISHRPGc9OHcyozn7yzNpo0jcIaUv7SS2iombYd/R0RUw9m6y4XOR2ax6nMF7PFyGWd4ziSmkNYhIVrr2/H1UPalHt/Pbr1bqbroFfVxA3qimb3nw0Jg4Gmw4M/Y4lq1QRhNiL1rLiMRgikjAwiYDRZRe1GKQZFQCKjQrjp1i7Mm7m9dMmkJGbQhEndadg4ktfeH82R1BwKC+wktoohNKxiVjGxjSKIbVS5kMwpB0+Rm1OkW2exGhk2qgPrV6eSd9aGEAIB3H5fb/oPbKl7Tl3BGh1Br9fvZ9PfPnQ7k0mJwWrGHBFKr9fvr5J7dnhoNHvenueXt8MUbsVoNvmFvRBGA82u74PBqGYLdZFLwlxVUTn27Mjg5wX7yDldSMfO8Qwb1b50s7imOJxymqlP/+Tn8V1CaJiZNz+5iZBQM0cP5+KwO2mRFFMtZqTVReb63ex5+wcKjmYRP7gbHR4aQ2ij+uWfeAE4i2wsHvY3srccxGVzYLSaEQYD1y6YhpSSpaOmIF0armI7pohQLPXCGbXxPcKaVP3SmqLiVNRctVKKQQgRA8wGEoE0YLyU0s9ZQAjhwp3XGeCIlPIGT3kSMAtoAPwG3C6lLDfJsFIMijdeWsaOLem6ddH1Q3j8ucG1Nr9BXUVKycnVO8hct5uQRtEkjr26NBFP4YnTJH+xmLyUdBpdcRlJfxiIKazs7H+K6qe6wm4/BSyTUk4XQjzl+fykTrsiKWVXnfIZwJtSyllCiA+Au4D3KymT4hKgrFAfTRPr0zypakbOlzJCCOIGdCFugH8yqLC4GDo/dUsNSKWoCirr4DYa+NJz/CUwpqInCneMhWuAORdyvuLSJjIq8Gh0366TrF2ZUo3SKBQXF5VVDI2llBme4xNA4wDtQoQQm4UQG4QQJS//BkCulLLEvOIY4J8/UKHQ4boxHQIGpHM6NP43d1c1S1Q3kJpGXko6hSf0nRAVCqjAUpIQYimg5/0zxfuDlFIKIQJtWLSQUh4XQrQElgshdgLn5bsvhLgXuBegefPm53Nq0HDZ7Bz8fDHJX/0MQOs7htLmzuEYLVXr6arwZ8C1bVi/Oo19u07q1p8JYK10KXNkwTrW3fcmjrMFaC6NBt1aM+DbKUQmxde0aIpaRrmKQUo5JFCdEOKkECJeSpkhhIgHMgNc47jnd4oQYiXQDZgLRAshTJ5ZQ1MgYEovKeVHwEfg3nwuT+5gozmc/DTkCbK3HsRV6A5FcHrHIQ59s4TrVvyjzsdbqmsIIZgwqQevPLNYNzR3iyS18exN1q/7WHnL1NJnF+DUr/v58cpHGJfyLUZr3UwcpKgaKruUNB+Y6DmeCPz33AZCiPpCCKvnOBboD+yRbnOoFcDYss6vLaTNXc3pbck+/1iuQhuntx8ibe7qGpTs0iWpdQNatonFfE7uBIvFyM236dk6XLpsf+Vbn2cX3MtKjrwiDs9bU0NSKWorlVUM04FrhRAHgSGezwghegohPvG06QBsFkJsx60Ipksp93jqngQeF0Ik495z+LSS8lQZad+v8slcVYKzoJi071fVgEQKgMf/7xquGtzanSlOQNPm0fz52UG0aV+307UGE0dBERnL/bPVgTv43tkDx6pZIkVtp1LrH1LKbGCwTvlm4G7P8TpAN3iOlDIFqPqoY0HAGBY4PWZZdYqqxWo1MfH+PtxxX280TWIMkJDpUmbZmOdwFujvuZgiQolq27SaJVLUdtR/UQVpM/k6TOH+JpKm8BDaTL6uBiRSeCOEUEpBh5zdaZxcuztQLERcNjsJw/z9naSU2E6fxVnoP0tWXPyo/6QKEj+oK60nDXfPDgwCDAJjmJXWk4YTP0itZytqJ7m706CskNma5LdnP/cpSl/6G3PbTWRW/Di+rT+apaOfpSjTP/uh4uJFxUo6T079dqB0TyFx3ABie7StETkUivLQXC6ytxzkx34PI8tIl2oMtXJ73v8QBgOnNu9n4cA/+2xUC5ORyKQ4btzzuQqKV8eprpAYlxyxPdoqZaCo1ZzecYj1D71N5vrdGIxGhMmEdAUOQabZHGgOJ0arhW0vfe2O2OqFdLooPHGa4z9totn1fatafEUtQC0l1QI0p4u978/nP53v5vuWt7Lh0XeVZ6rigshLzWDhVY+SuXYXaBLN4Sw3eU9k6yalfgyntyejl1PVVWgjZ2dqlcisqH2oGUMNI6VkxbgXOL5kCy7PRt/+DxaQOnsFY7Z/TGhj5ailqDi7Xp+NU2fEbwyzIqWGVuSbt9kYaqXPWw+Vfo5o2YSCo1l+1zWGWYlICl7aWEXtRimGaqbgWBb7PlhAzs4UGnRvQ4Oe7Uhf+rtSALeXtT0nn52vzab3Gw/UoLSKusbJNbt103C6Cm10ePQmQhtGs+/DBRRn5WKNiSLx5quI7dmutF2XZ/7Isk37fJ3hhMAUaqXFmP7V8ScoagFqKakaObluNz90nMyu17/j6IL17JgxixVjX8BZZPNrqzmcHFmwvgakVNRlIhL141gaQ61EJsVz2WM3E54Qi8Fkoig9mwOfLOS7xFs4/rPbmCPh2p70eeshTJGhmKPCMIZZqde+GSNWvaXCZlxCqBlDNSGlZPWt03Dm/+5opBV7pvwB8uJaomo2S5qi6rGfyafgaBbhzRqWJr2pDJ3+Op70ZVv8wl8Io4FWtw5m28tfk73tUOmzV7LRvHzsC9xyYg6msBDa3X09rW+/ltM7UrBEhVOvXfXntVbULGrGUE2cTT5OcVaufqWOxbApLIQOD6n0FBcrmsPJ2vv/waz4cfzY/xFmxY9l7b1v4LI7yj+5DOKu6kzvfzyIKcyKOSocc2QY1th6DF34KiEN6nHw859+H5B4IYTg2E+bSj8brRYa9mqvlMIlipoxVCOBPEaE2YgwGhDCgOZwYrCYaHbDFbSeOLRa5VMEl/zDJ3HkFVKvfXMMJl/7/41/fo9D3yzFVWzH5XlRH/p2GQhB/w8fr9R92987kla3DiZznWe/wWjAHBmGlNLPFLUEKaXPbFZxaaMUQzUR1TqBkIbRFBz2zx9Qr20zhi97nbQ5q3HmF9FkaE8adG1dA1IqgkFeSjorxr9E7p7DCJMRg8lIn7f/ROvbrgXcQe0OfvZTqUIowVVk49DXS+j19/uwRIVXSgZTWAgZK7ax5625GKxmpNNFeLNGNOzXkfQlv4HmO0yRThfxg7tV6p6KiwelGKoJIQQDvnmGn4c/ieZwodkdGKxmjBYzV335JKGN6tPhwdE1LeZFS/qyLez7YAG27DM0H92ftneNwBwRGvT7uOwOFl79mNsPxevlu+7+NwlPiCV+UDeKMk4jTPoexAazkcLjpyqtGA58uoi978zzmZGcOXAU+9kCzJFhOAuLkQ639ZIp3L1sGZ7QsFL3VFw8KMVQjTTu34kb93zOvvfnk7MjhQY92tD+/hsIi28AwJmDx/jtmU9IX7oFc3gIbe+9ns5P3qKsQSrJ5mc+Ye8780rDpmf9uo+978xj1Kb3sdaPDOq9ji5YjyOv0G9E7iq0sX3at8QP6kZYkwYBQ1RoTo3wZpUPGb5zxkz/MPGaxJlXyBUf/JnMtbtIX7qF0EbRXPbncTRXpqgKL5RiqGYimjWi5yt3+5XnpWawoPeDpS8Vx5kCds6YxcnVOxm25O8IEcB0SVEmZw+ls+etuT7LNq5CGwXHT7Fzxix6Tr8nuPdLPu7nYFZC7v6jgHuZp/2DN7Dv/fk+1kPGMCtt774+KDOZogCe81KTaDYHV7z7aKXvobh4UVZJtYTtU79xb/55jTRdRXayNu4lc93u0rL8o5lsffFLfpk0gwOfLlRhkcvh6P/W6276azYHqbNXBP1+0R1aYAzVn+EVHT/Fwqsf5fT2Q/Scfg8dHhyNMcyKKTwEY5iV9vePovfr9wdFjvqXJ+mWSymJUftXinJQM4ZaQvqyrbrLCy6bg5O/7KRx/04cX7yJZTc/j3RpaDYHaXNXs/XFLxm18V+ly1GXAi67A8eZAiwxkeVG+zSYjAFnW4HW+StD0xF9CImNpqDQpvt9nlyzix+vepTRWz+i12v30e3FSRSdzCG0cX1MocFL+NRj2l0sGTkFl5fzpDHEQqO+HZVhg6Jc1IyhlmCNjdItN1rNhMRG4bI7WDHhZVyFNjSb29bdWVBM0YkcNj76bnWKWmNoDie//vV9/h0zhtnNJzCz4U3semsOZYWObz6mv25QOGOIhdZ3BM8cuDgrlwOfLeLgZ4sYNPs54gZ2RZj0/71cxXZ2zphJwfEs8g6lE9akQVCVAkD8oG5cM/cFoto1c+cOCbXQevJwhsyfGtT7KC5OKpWPQQgRA8wGEoE0YLyUMuecNoOAN72K2gMTpJT/EUJ8AQwAznjqJkkpt5V335rMx1BVHPpmCeseeMtvw9AUHsL4o7PJ3nKQ5Tf+n3sP4hwMZhN3FP900e9DrLn776TMXOEzCjaFh9B96p1c9ujNAc/b/c4P/PbUJ2h2B9KlYYoIoV7bZoxY/RamMP+sfOfL/k8XsvHhaomgxAAAEedJREFUdxBGg1tJuTQuf/qP2HLy2PvPH3TPMYZaQHp8WISg52v30f7ekZWWRQ+XzY7BbEIY1DjwUqei+Rgq+6Q8BSyTUrYBlnk++yClXCGl7Cql7ApcAxQCP3s1eaKkviJK4WKl5a1DaD1xGMYQC6bwEEyRoZgiQhn8n5exRke4HZUCvPdlWRm6LhKKs3JJ+fdyH6UA7lnTtpe/LrMPLnv4JkZtfI+Oj9xE6zuGcuWnf2Pk+neDohRy9x1h4yPv4iq24ywoxlVow2VzsOu12SAD5wN3FbnNSJ15RTjOFvLr4//iyPx1lZZHD6PVopSC4ryo7B7DaGCg5/hLYCXwZBntxwKLpJT+w95LHCEEV7z7CJ3+Op6M5VuxRIXRdESf0pdXwz7tcRXrhEsQgvjB3S/62cKZg8cxWM1+TmEAzvxi7GcKyjQ9rd8p6YIj1UopsefkYbCaMYf7Wgwd/PwnNIfTX6bCYvJTMxAVzEPtKrSx7aWvaH5DvwuSUaEIJpUdRjSWUmZ4jk8A+qEdf2cCMPOcsmlCiB1CiDeFEMFdaK2DRCbG0fbO60gcO6BUKWhOF8tuet5/xiAE5qgw+r79p+oXtJqJaN6odG/lXAwWE+ZI/4CDeakZnPrtgG702oqSsWIrP7R35z/+d8wYlox8msKM7NL64swc3TDXAPYzBQxdNANrbD3MkWGYo8IRZhMGs/54LC81Q7dcoahuyp0xCCGWAnoZOqZ4f5BSSiFEwA0LIUQ8cDmw2Kv4adwKxQJ8hHu28VKA8+8F7gVo3rx5eWJfVByet4ZTv+7zezEaTEZ6v/EA9drW/kBnBcey2Pz0xxydvx5hMtBywiC6T72rwg5m4U0bEj+4G+lLt/j0gzHMSoeHxvjEIso/msnym58nd1caBosJ6dLK3YfQI3tbMktGTfHxNTi28Fe+S7yFgTOfI/Gmq0gY3pu0ub/4xRkyhlpoNrIvjftdxoSM78lct9ttOODSWDnhZd1ZhgpYp6gtlDtjkFIOkVJ20vn5L3DS88IvefFnlnGp8cA8KWXpf7WUMkO6sQGfA73LkOMjKWVPKWXPhg0vLdf91NnL/b1YcVvpHP/p1xqQ6Pwozj7D/B73kzprBY68Quw5+Rz4dBH/6/snXLbAuYjPZeC/nyXh2h4YQyyY64W7LYtuH0r3lyeXtpGaxqKBj3N6azKuYjuOs4U4C4rZMuVT0uauxpabz4FPfmTH9JmcXLOzTIum7dO+1Q06Jx0uVv1xKqnfraDFjVcSmRSH0WourTeYTVgb1KPdPde7PxuNxF3VmYRhvWh6XW8iEhsjzL6mssYwK91emFThvlAoqpLK7jHMByYC0z2//1tG21twzxBKEULESykzhHuBfAywq5LyXJQYLOYLqqst7PvXfBx5hT52/ZrdSWFGNmlzVtPq1iEVuo45Mowh86dRmH6KgqNZRLVJwBrja+abvmwLxady/XwInIU21tz9OprDiRACl82B0Womtnd7hi58VTfsyOmtB3VNXUvk3/TEhySOG8j1a95mx/SZJH+9BOl0kjh2AF2fu103v4IQguuW/4NfJs0gfekWhNGAOSqMPm89RMLQco1FFIpqobKKYTrwnRDiLuAw7lkBQoiewP1Syrs9nxOBZsCqc87/VgjREPfq+TYgOG6fFxltJg7j6IL1uqasbSYNq7L7ag4nR+avI3trMhEtGpP0h4Glwd2Ks3I5+OVizh44RoMebWl165CAoRyOL9kcYNO4iPRlWyqsGEoIaxJLWJNY3bq8lAykU99CyXGmwPf+ThdZ6/ewY/pMuj0/0a99ZOsE8lICr/sXZpzGmV+EOTKMHtPuose0uyokf0hsPYYsmEbGiq0cnrcGa4MoYjq3rNC5CkV1UCnFIKXMBgbrlG8G7vb6nAYk6LS7pjL3v1RoMrQnieMGkPb9Kpye9W5TmJWkPwwifnD3KrlnUWYOP/Z7mKKsXJx5RZjCQ9j0tw8Zvux1NLuTxUP/hnS5cBXZMc1cztbnv2DkhveITPTfjgpr0gCE8Bt9G8wmd10Qqd8pqcKWQOB2Ntv/0Y+6iqHL03/kxOrtaHrWYLjlN16AY5qUkjWTXyNt7mqchTaE0cCuv8+m89N/pOuzt5/39RSKYKNCYtQBhBBc+ekTtJk8nNTvVgLQ8g+DaNS/U5WZqa574C3yj2aWhmYuma0sv/H/0DTNZ7PVWVCMq8jO2nteZ/iS1/2u1fHhmzj6vw3+6SZNRtreeR0Ahemn2P/xj5zZd4TYXu1pM3n4BUU+bdTvMuq1acrpHYcCRjA9F739G4C4AV3o96/HWHv3G35+EsYQC60nDfNLwFMRDs9b41YKnvtKpwuX08WOV2fSfFQ/Yrq0Ou9rKhTBRCmGOoIQgrirOhN3Vecqv5fmcLqDzzn8zTCLs8/qpqKTmsaJVTtwFBT52fo37t+J7lPv5LcnP0ZzudyBAoWgzeThRLZswsk1O/l5xNNoDieazcHh/65j29SvGbXhvQpbXDmL7TjzCinKyiWqfTNy9x7G5arAxrZB0GRI4AQ1bSYNJ25QVxYPeYLCjGwMJiOa3Un84O4X7Bdx4OMf9Y0J7A6Sv15Cb6UYFDWMUgwKPzSnyy+fQAlCiMCWPIKAo/TQxvXdQetKzDSlJPmLxYQ1a8i+d+b5zEC0YjtasZ3/dr+PURv/Rf3LEgPK6igoYsOf3iZ11gp3SGmH071jVZFILwaBOSKUHjph0L2JbBHHzQe+4tTm/RQcPkn9zi0rZSIcaIYiXVrAOoWiOlF+8go/TKHWgGGbAQxW/fFE/ctbIgwGji3aSPqyLaWJ7aWm8evj7/uHsygsZvtLX2E7Z1O4BFehjYVXPYotNz+gLMvGPEfKrBW4bI7ffQMqGP6r1a1DGL3lwwq95IUQNOzVnsSxAyrtN5I4foBuqAxTRAgtVMIcRS1AKQaFLlf86zFM4SE+G7nGMCu933yQKz95AmOYtTT+jjCbMEWEkjCsFzMb38zKW6ax/ObnmRU3lvSlv1GUmetnEVSCMBgCmoSCO+z4oa9/1q3L2Z1G5vo9AT2iyyK6Ywuu/vIpIls2Oe9zK0vbO68jMineJ2+DKTyERv060eTaHtUuj0JxLmopSaFLo74dGbXpfXa8+m+yNu4lslUTOv9tAnEDugAQ1aoJu978nrP7jxHbuz1xA7qw+o5XcRXZfGYGy8b8H6N3fBxw+Um6NExhVr+N6RJcRTZydqbq1uXsSsVgNKIfkCIwxjArfd95+DzPCh6msBBGbniXfR8sIOXfyzBazLS9ewStJw5Twe4UtQKlGBQBiW7fnKu/9AuYC0BMl1Zc/cXvdSvGv6jrJay5XKR+t5IWY/pzeN5aNPvvo3thMtKgexu6PHsbS0dN0d2fMIUFXtaKTIqvUGTZkEbRhDVrSOGxUzTo2ppuL06iYe/25Z5XlZjDQ7n8L+O5/C/ja1QOhUIPpRgUQSE/7aTukpBmc5CfdpJ+Hz5OwdEsTm8/5PZpAMKbN2LQnBcIi4thyIJpLL3hWd+AdEJgsJppdbt+Qp3YXu2IbNmE3L2HdQPZmcJDECYjQxdNp0G3NsH5QxWKSwClGBRBofGAzpzecQjN7hsczhQRSuP+nbBEhXP9mrc5teUAubsPE9kynkb9Liv1w2g6vDfDFs/glzv/TnFmLkhJVNumDPh2CtZo/9AS4N4QHvbzDJaPfZHs3w5gsJjQHC4ShvciIimOem2a0vKWa0q9tRUKRcWoVAa3muJizOBW1yk4nsW8TnfhOFtYOnMQJiPhCbHcuPcLTCH+sYj0kFKSn3YCg8VEeELFgyXmpZ2gODOX6I4tAobmUCgudaorg5tCAUB4QkNGrn+XJtf2QBgNGKxmksYPYOTG9yqsFMA9C4hMij8vpQDuPBYNe7dXSkGhCAJqKUkRNKLbN2fYTzNKLZAu9qxyCsXFilIMiqCjFIJCUbdRS0kKhUKh8EEpBoVCoVD4oBSDQqFQKHxQikGhUCgUPijFoFAoFAoflGJQKBQKhQ910vNZCJEFHPYqigVO1ZA4FaE2y6dkuzCUbBdObZbvYpethZSyXO/ROqkYzkUIsbkibt41RW2WT8l2YSjZLpzaLJ+SzY1aSlIoFAqFD0oxKBQKhcKHi0UxfFTTApRDbZZPyXZhKNkunNosn5KNi2SPQaFQKBTB42KZMSgUCoUiSNQZxSCEGCeE2C2E0IQQAXfmhRDDhRD7hRDJQoinvMqThBAbPeWzhRAVTxJQvmwxQoglQoiDnt/1ddoMEkJs8/opFkKM8dR9IYRI9arrGizZKiqfp53LS4b5XuU13XddhRDrPd//DiHEH7zqgt53gZ4hr3qrpx+SPf2S6FX3tKd8vxBiWGVluQDZHhdC7PH00zIhRAuvOt3vtxplmySEyPKS4W6vuomeZ+CgEGJiDcj2ppdcB4QQuV51Vd1vnwkhMoUQuwLUCyHE2x7ZdwghunvVVU2/SSnrxA/QAWgHrAR6BmhjBA4BLQELsB3o6Kn7DpjgOf4AeCCIsr0GPOU5fgqYUU77GOA0EOb5/AUwtgr7rkLyAfkBymu074C2QBvPcRMgA4iuir4r6xnyavMg8IHneAIw23Pc0dPeCiR5rmOsZtkGeT1XD5TIVtb3W42yTQLe1Tk3Bkjx/K7vOa5fnbKd0/5h4LPq6DfP9a8GugO7AtSPABYBAugLbKzqfqszMwYp5V4p5f5ymvUGkqWUKVJKOzALGC2EEMA1wBxPuy+BMUEUb7TnmhW99lhgkZSyMIgylMX5yldKbeg7KeUBKeVBz3E6kAmcX4q3iqP7DJUh8xxgsKefRgOzpJQ2KWUqkOy5XrXJJqVc4fVcbQCaBvH+lZKtDIYBS6SUp6WUOcASYHgNynYLMDOI9y8TKeVq3APFQIwGvpJuNgDRQoh4qrDf6oxiqCAJwFGvz8c8ZQ2AXCml85zyYNFYSpnhOT4BNC6n/QT8H7xpnmnim0IIaxBlOx/5QoQQm4UQG0qWuahlfSeE6I171HfIqziYfRfoGdJt4+mXM7j7qSLnVrVs3tyFe6RZgt73W92y3ez5ruYIIZqd57lVLRuepbckYLlXcVX2W0UIJH+V9VutyuAmhFgKxOlUTZFS/re65fGmLNm8P0gppRAioKmXR9NfDiz2Kn4a90vRgtsk7UngpRqQr4WU8rgQoiWwXAixE/dLr1IEue++BiZKKTVPcaX77mJECHEb0BMY4FXs9/1KKQ/pX6FKWADMlFLahBD34Z51XVON968IE4A5UkqXV1lN91u1U6sUg5RySCUvcRxo5vW5qacsG/f0y+QZ4ZWUB0U2IcRJIUS8lDLD8/LKLONS44F5UkqH17VLRsw2IcTnwF/PR7ZgySelPO75nSKEWAl0A+ZSC/pOCBEF/Ih7kLDB69qV7rtzCPQM6bU5JoQwAfVwP2MVObeqZUMIMQS30h0gpbSVlAf4foP1gitXNillttfHT3DvL5WcO/Ccc1cGSa4KyebFBOAh74Iq7reKEEj+Kuu3i20paRPQRritaCy4v+T50r1TswL32j7ARCCYM5D5nmtW5Np+65eeF2LJev4YQNc6oSrlE0LUL1mGEULEAv2BPbWh7zzf5Tzc66xzzqkLdt/pPkNlyDwWWO7pp/nABOG2WkoC2gC/VlKe85JNCNEN+BC4QUqZ6VWu+/1Ws2zxXh9vAPZ6jhcDQz0y1geG4jujrnLZPPK1x72Ju96rrKr7rSLMB+7wWCf1Bc54BkRV12/B2lmv6h/gRtxraDbgJLDYU94EWOjVbgRwALdGn+JV3hL3P2ky8D1gDaJsDYBlwEFgKRDjKe8JfOLVLhG3ljecc/5yYCful9o3QESQ+65c+YB+Hhm2e37fVVv6DrgNcADbvH66VlXf6T1DuJenbvAch3j6IdnTLy29zp3iOW8/cF0V/B+UJ9tSz/9HST/NL+/7rUbZXgV2e2RYAbT3OvdOT38mA5OrWzbP5xeA6eecVx39NhO3pZ0D9zvuLuB+4H5PvQDe88i+Ey+rzKrqN+X5rFAoFAofLralJIVCoVBUEqUYFAqFQuGDUgwKhUKh8EEpBoVCoVD4oBSDQqFQKHxQikGhUCgUPijFoFAoFAoflGJQKBQKhQ//D0HbFz5uyvl0AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "N = 100 # 每一个类别的生成的点的数量\n",
    "D = 2 # 每个点的维度，这里使用平面，所以是2维数据\n",
    "K = 3 # 类别数量，我们一共生成3个类别的点\n",
    "\n",
    "# 所有的样本数据，一共300个点，每个点用2个维度表示\n",
    "# 所有训练数据就是一个300*2的二维矩阵\n",
    "X = np.zeros((N*K, D))\n",
    "# 标签数据，一共是300个点，每个点对应一个类别，\n",
    "# 所以标签是一个300*1的矩阵\n",
    "y = np.zeros(N*K, dtype='uint8')\n",
    "\n",
    "# 生成训练数据\n",
    "for j in range(K):\n",
    "    ix = range(N*j, N*(j+1))\n",
    "    r = np.linspace(0.0, 1, N)\n",
    "    t = np.linspace(j*4, (j+1)*4, N) + np.random.randn(N)*0.2\n",
    "    X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]\n",
    "    y[ix] = j\n",
    "    \n",
    "plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.Spectral)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练一个Softmax线性分类器\n",
    "\n",
    "使用softmax和cross-entropy loss，训练一个线性分类器。\n",
    "\n",
    "实际上就是直接用softmax做多分类，使用交叉熵损失作为损失函数，训练一个线性分类模型。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "iteration    0 loss: 1.097993\n",
      "iteration   10 loss: 0.908688\n",
      "iteration   20 loss: 0.838372\n",
      "iteration   30 loss: 0.806482\n",
      "iteration   40 loss: 0.789911\n",
      "iteration   50 loss: 0.780488\n",
      "iteration   60 loss: 0.774783\n",
      "iteration   70 loss: 0.771169\n",
      "iteration   80 loss: 0.768801\n",
      "iteration   90 loss: 0.767208\n",
      "iteration  100 loss: 0.766114\n",
      "iteration  110 loss: 0.765351\n",
      "iteration  120 loss: 0.764811\n",
      "iteration  130 loss: 0.764425\n",
      "iteration  140 loss: 0.764147\n",
      "iteration  150 loss: 0.763945\n",
      "iteration  160 loss: 0.763797\n",
      "iteration  170 loss: 0.763688\n",
      "iteration  180 loss: 0.763608\n",
      "iteration  190 loss: 0.763548\n",
      "Training accuracy: 0.51\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "N = 100\n",
    "D = 2\n",
    "K = 3\n",
    "X = np.zeros((N*K, D))\n",
    "y = np.zeros(N*K, dtype='uint8')\n",
    "\n",
    "for j in range(K):\n",
    "    ix = range(N*j, N*(j+1))\n",
    "    r = np.linspace(0.0, 1, N)\n",
    "    t = np.linspace(j*4, (j+1)*4, N) + np.random.randn(N)*0.2\n",
    "    X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]\n",
    "    y[ix] = j\n",
    "    \n",
    "# plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.Spectral)\n",
    "# plt.show()\n",
    "\n",
    "# 初始化权重和偏置\n",
    "W = 0.01 * np.random.randn(D, K)\n",
    "b = np.zeros((1, K))\n",
    "\n",
    "step_size = 1e-0\n",
    "reg = 1e-3 # regularization strength\n",
    "\n",
    "\n",
    "# 获取训练样本数量\n",
    "num_examples = X.shape[0]\n",
    "\n",
    "for i in range(200):\n",
    "\n",
    "    # 计算分类得分\n",
    "    scores = np.dot(X, W) + b\n",
    "\n",
    "    # 计算 softmax得分\n",
    "    exp_scores = np.exp(scores)\n",
    "    probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)\n",
    "\n",
    "    # 使用交叉熵损失\n",
    "    correct_log_probs = -np.log(probs[range(num_examples), y])\n",
    "\n",
    "    # 计算训练集的data loss，总的损失除以样本数量\n",
    "    data_loss = np.sum(correct_log_probs) / num_examples\n",
    "    # 计算正则项损失reg loss，使用L2正则\n",
    "    # reg就是lambda\n",
    "    reg_loss = 0.5 * reg * np.sum(W * W)\n",
    "    # 计算总的损失函数\n",
    "    loss = data_loss + reg_loss\n",
    "    \n",
    "    if i%10 == 0:\n",
    "        print(\"iteration %4d loss: %f\" % (i, loss))\n",
    "\n",
    "    # 计算梯度，反向传播\n",
    "    # 为什么 dscores = probs ??\n",
    "    dscores = probs\n",
    "    dscores[range(num_examples), y] -= 1\n",
    "    dscores /= num_examples\n",
    "\n",
    "    dW = np.dot(X.T, dscores)\n",
    "    db = np.sum(dscores, axis=0, keepdims=True)\n",
    "    dW += reg * W # 正则项的梯度，dW不是第一次出现，必须累加\n",
    "\n",
    "    # 更新参数\n",
    "    W += -step_size * dW\n",
    "    b += -step_size * db\n",
    "\n",
    "    \n",
    "# 训练结束，估算准确率\n",
    "scores = np.dot(X, W) + b\n",
    "# 在第二个维度（类别维度）取出概率最高的分类\n",
    "predicted_class = np.argmax(scores, axis=1)\n",
    "print(\"Training accuracy: %.2f\" % (np.mean(predicted_class == y)))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### 上面代码中，有一个疑问：为什么`dscores = probs`?\n",
    "\n",
    "Softmax函数得到的是一个归一化后的概率向量，我们用 $p_k$表示类别为k的概率。那么：\n",
    "\n",
    "$$p_k = \\frac{e^{f_k}}{\\sum_je^{f_j}}$$\n",
    "\n",
    "那么我们的交叉熵损失为：\n",
    "\n",
    "$$L_i = -\\log(p_{y_i})$$\n",
    "\n",
    "那么，有：\n",
    "\n",
    "$$\\frac{\\partial L_i }{ \\partial f_k } = p_k - \\mathbb{1}(y_i = k)$$\n",
    "\n",
    "这个式子表明：**增加正确分类的分数，可以使得损失降低**！\n",
    "\n",
    "假设概率向量\n",
    "\n",
    "$$p=[0.2, 0.3, 0.5]$$\n",
    "\n",
    "并且第二个0.3是正确分类的概率值。那么我们的梯度是怎么样的呢？\n",
    "\n",
    "根据上面的公式，只有在正确分类处，梯度变成原来分类概率`-1`，其他位置，梯度就等于原来的分类概率，也就是：\n",
    "\n",
    "$$df = [0.2, -0.7, 0.5]$$\n",
    "\n",
    "而这里的**f不就是我们的scores函数**吗？\n",
    "\n",
    "也就是说\n",
    "\n",
    "$$dscores = df = probs(y_i != k)$$\n",
    "\n",
    "那么，对于$y_i=k$的地方，我们$-1$就好了。\n",
    "\n",
    "于是，我们有了以下公式：\n",
    "\n",
    "```python\n",
    "# 一般情况下的df，也就是dscores\n",
    "dscores = probs\n",
    "# 预测分类正好是正确分类的情况，需要在该位置的梯度值减去1\n",
    "dscores[range(num_examples), y] -= 1\n",
    "# 平均\n",
    "dscores /= num_examples\n",
    "\n",
    "```\n",
    "\n",
    "总之，这是因为softmax这个函数自身的性质！！！\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到，正确率只有 `0.5１`。\n",
    "\n",
    "也算是预料之中，因为数据本来线性特征就不明显。强行上线性分类器，当然效果不佳了。\n",
    "\n",
    "斯坦福cs231n有一个图，展示了这个模型的决策边界：\n",
    "\n",
    "![softmax_linear_classify](images/softmax_linear_classify.png)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练一个神经网络\n",
    "\n",
    "上面的softmax线性分类器效果不佳，我们训练一个神经网络试试看。\n",
    "\n",
    "代码如下：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "iteration    0 loss 1.109818\n",
      "iteration 1000 loss 0.277248\n",
      "iteration 2000 loss 0.202578\n",
      "iteration 3000 loss 0.192406\n",
      "iteration 4000 loss 0.189857\n",
      "iteration 5000 loss 0.189404\n",
      "iteration 6000 loss 0.189292\n",
      "iteration 7000 loss 0.189199\n",
      "iteration 8000 loss 0.189143\n",
      "iteration 9000 loss 0.189097\n",
      "Training accuracy: 0.99\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "N = 100\n",
    "D = 2\n",
    "K = 3\n",
    "\n",
    "X = np.zeros((N*K, D))\n",
    "y = np.zeros(N*K, dtype='uint8')\n",
    "\n",
    "for j in range(K):\n",
    "    ix = range(N*j, N*(j+1))\n",
    "    r = np.linspace(0.0, 1, N)\n",
    "    t = np.linspace(j*4, (j+1)*4, N) + np.random.randn(N)*0.2\n",
    "    X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]\n",
    "    y[ix] = j\n",
    "\n",
    "h = 100 # 隐藏层的神经元数量\n",
    "\n",
    "# 第一个层的权重和偏置初始化\n",
    "W1 = 0.01 * np.random.randn(D, h)\n",
    "b1 = np.zeros((1, h))\n",
    "\n",
    "# 第二层的权重和偏置初始化\n",
    "W2 = 0.01 * np.random.randn(h, K)\n",
    "b2 = np.zeros((1, K))\n",
    "\n",
    "step_size = 1e-0\n",
    "reg = 1e-3 # regularization strength\n",
    "\n",
    "# 获取训练样本数量\n",
    "num_examples = X.shape[0]\n",
    "\n",
    "for i in range(10000):\n",
    "\n",
    "    # 计算第一个隐藏层的输出，使用ReLU激活函数\n",
    "    hidden_layer = np.maximum(0, np.dot(X, W1) + b1)\n",
    "    # 计算输出层的结果，也就是最终的分类得分\n",
    "    scores = np.dot(hidden_layer, W2) + b2\n",
    "    \n",
    "    # softmax\n",
    "    exp_scores = np.exp(scores)\n",
    "    probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True) # [N x K]\n",
    "  \n",
    "    # 计算损失，和之前的一样\n",
    "    correct_logprobs = -np.log(probs[range(num_examples),y])\n",
    "    data_loss = np.sum(correct_logprobs) / num_examples\n",
    "    reg_loss = 0.5 * reg * np.sum(W1 * W1) + 0.5 * reg * np.sum(W2 * W2)\n",
    "    loss = data_loss + reg_loss\n",
    "    \n",
    "    if i % 1000 == 0:\n",
    "        print (\"iteration %4d loss %f\" % (i, loss))\n",
    "  \n",
    "    # 计算scores的梯度\n",
    "    dscores = probs\n",
    "    dscores[range(num_examples),y] -= 1\n",
    "    dscores /= num_examples\n",
    "  \n",
    "    # 计算梯度，反向传播\n",
    "    dW2 = np.dot(hidden_layer.T, dscores)\n",
    "    db2 = np.sum(dscores, axis=0, keepdims=True)\n",
    "    \n",
    "    # 反向传播隐藏层\n",
    "    dhidden = np.dot(dscores, W2.T)\n",
    "    # 反向传播ReLu函数\n",
    "    dhidden[hidden_layer <= 0] = 0\n",
    "    \n",
    "    dW1 = np.dot(X.T, dhidden)\n",
    "    db1 = np.sum(dhidden, axis=0, keepdims=True)\n",
    "    \n",
    "    # 加上正则项\n",
    "    dW2 += reg * W2\n",
    "    dW1 += reg * W1\n",
    "    \n",
    "    # 更新参数\n",
    "    W1 += -step_size * dW1\n",
    "    b1 += -step_size * db1\n",
    "    W2 += -step_size * dW2\n",
    "    b2 += -step_size * db2\n",
    "\n",
    "# 训练结束，估算正确率\n",
    "hidden_layer = np.maximum(0, np.dot(X, W1) + b1)\n",
    "scores = np.dot(hidden_layer, W2) + b2\n",
    "predicted_class = np.argmax(scores, axis=1)\n",
    "print(\"Training accuracy: %.2f\" % (np.mean(predicted_class == y)))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到，正确率已经提升到`0.99`。\n",
    "\n",
    "斯坦福cs231n也有一张图，展示了这个神经网络的决策边界：\n",
    "\n",
    "![nerual_classify](images/nerual_classify.png)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
